home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d17 / proff.arc / STACK.C < prev   
C/C++ Source or Header  |  1988-02-17  |  2KB  |  115 lines

  1.  
  2.  
  3. #include <stdio.h>
  4. #include "proff.h"
  5.  
  6. struct _proffitem {
  7.         int    Xinval;
  8.         int    Xrmval;
  9.         int    Xoffset;
  10.         int    Xlsval;
  11.         int    Xplval;
  12.         int    Xm1val;
  13.         int    Xm2val;
  14.         int    Xm3val;
  15.         int    Xm4val;
  16.         int    Xfill;
  17.         int    Xrjust;
  18.  
  19.         char    Xcchar;
  20.         char    Xgenesc;
  21.         char    Xroman;
  22.         char    Xbolding;
  23.         char    Xpaging;
  24.         char    Xautopar;
  25.  
  26.         struct     _proffitem *prev;
  27. };
  28.  
  29. static struct
  30. _proffitem *head = NULL;
  31. static struct
  32. _proffitem *top  = NULL;
  33.  
  34.  
  35. char *pusherr = "save: stack overflow.\n";
  36. char *poperr  = "restore: stack underflow.\n";
  37.  
  38. /*
  39.  * save - save proff parameters
  40.  *
  41.  */
  42. save()
  43. {
  44.     struct _proffitem *sp;
  45.     char *malloc();
  46.  
  47.     if ((sp = (struct _proffitem *) malloc(sizeof(*sp))) == NULL) {
  48.         fprintf(stderr,pusherr);
  49.         return(FALSE);
  50.     }
  51.     else {
  52.         p_memoryus += sizeof(struct _proffitem);
  53.         if (head == NULL) {    /* first element in stack */
  54.             head = sp;
  55.             top = NULL;    
  56.         }
  57.         
  58.         sp->Xinval = inval;
  59.         sp->Xrmval = rmval;
  60.         sp->Xoffset= offset;
  61.         sp->Xlsval = lsval;
  62.         sp->Xplval = plval;
  63.         sp->Xm1val = m1val;
  64.         sp->Xm2val = m2val;
  65.         sp->Xm3val = m3val;
  66.         sp->Xm4val = m4val;
  67.         sp->Xfill  = fill;
  68.         sp->Xrjust = rjust;
  69.         sp->Xcchar = cchar;
  70.         sp->Xgenesc= genesc;
  71.         sp->Xroman = roman;
  72.         sp->Xbolding = bolding;
  73.         sp->Xpaging = paging;
  74.         sp->Xautopar = autopar;
  75.  
  76.         sp->prev = top;
  77.         top = sp;
  78.     }
  79.     return(TRUE);
  80. }
  81.  
  82. restore()
  83. {
  84.     struct _proffitem *sp;
  85.  
  86.     if (top != NULL) {
  87.  
  88.         inval = top->Xinval;
  89.         rmval = top->Xrmval;
  90.         offset= top->Xoffset;
  91.         lsval = top->Xlsval;
  92.         plval = top->Xplval;
  93.         m1val = top->Xm1val;
  94.         m2val = top->Xm2val;
  95.         m3val = top->Xm3val;
  96.         m4val = top->Xm4val;
  97.         fill  = top->Xfill;
  98.         rjust = top->Xrjust;
  99.         cchar = top->Xcchar;
  100.         genesc= top->Xgenesc;
  101.         roman = top->Xroman;
  102.         bolding = top->Xbolding;
  103.         paging = top->Xpaging;
  104.         autopar = top->Xautopar;
  105.  
  106.         sp = top->prev;
  107.         free(top);
  108.         p_memoryus -= sizeof(struct _proffitem);
  109.         if ((top = sp) == NULL)
  110.             head = NULL;
  111.     }
  112.     else
  113.         fprintf(stderr,poperr);
  114. }
  115.